#include "gtkrangeprivate.h"
+#include "gtkaccessible.h"
#include "gtkadjustmentprivate.h"
#include "gtkcolorscaleprivate.h"
+#include "gtkenums.h"
#include "gtkeventcontrollerkey.h"
#include "gtkeventcontrollerscroll.h"
#include "gtkgesturedrag.h"
double dy,
GtkRange *range);
+static void gtk_range_set_orientation (GtkRange *range,
+ GtkOrientation orientation);
+
G_DEFINE_TYPE_WITH_CODE (GtkRange, gtk_range, GTK_TYPE_WIDGET,
G_ADD_PRIVATE (GtkRange)
G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE,
GParamSpec *pspec)
{
GtkRange *range = GTK_RANGE (object);
- GtkRangePrivate *priv = gtk_range_get_instance_private (range);
switch (prop_id)
{
case PROP_ORIENTATION:
- if (priv->orientation != g_value_get_enum (value))
- {
- priv->orientation = g_value_get_enum (value);
- gtk_widget_update_orientation (GTK_WIDGET (range), priv->orientation);
- gtk_widget_queue_resize (GTK_WIDGET (range));
- g_object_notify_by_pspec (object, pspec);
- }
+ gtk_range_set_orientation (range, g_value_get_enum (value));
break;
case PROP_ADJUSTMENT:
gtk_range_set_adjustment (range, g_value_get_object (value));
gtk_widget_add_controller (GTK_WIDGET (range), controller);
}
+static void
+gtk_range_set_orientation (GtkRange *range,
+ GtkOrientation orientation)
+{
+ GtkRangePrivate *priv = gtk_range_get_instance_private (range);
+
+ if (priv->orientation != orientation)
+ {
+ priv->orientation = orientation;
+
+ gtk_accessible_update_property (GTK_ACCESSIBLE (range),
+ GTK_ACCESSIBLE_PROPERTY_ORIENTATION, priv->orientation,
+ -1);
+
+ gtk_widget_update_orientation (GTK_WIDGET (range), priv->orientation);
+ gtk_widget_queue_resize (GTK_WIDGET (range));
+
+ g_object_notify (G_OBJECT (range), "orientation");
+ }
+}
+
/**
* gtk_range_get_adjustment:
* @range: a #GtkRange
G_CALLBACK (gtk_range_adjustment_value_changed),
range);
+ gtk_accessible_update_property (GTK_ACCESSIBLE (range),
+ GTK_ACCESSIBLE_PROPERTY_VALUE_MAX, gtk_adjustment_get_upper (adjustment),
+ GTK_ACCESSIBLE_PROPERTY_VALUE_MIN, gtk_adjustment_get_lower (adjustment),
+ GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, gtk_adjustment_get_value (adjustment),
+ -1);
+
gtk_range_adjustment_changed (adjustment, range);
gtk_range_adjustment_value_changed (adjustment, range);
{
GtkRange *range = GTK_RANGE (data);
GtkRangePrivate *priv = gtk_range_get_instance_private (range);
+ double upper = gtk_adjustment_get_upper (priv->adjustment);
+ double lower = gtk_adjustment_get_lower (priv->adjustment);
- if (gtk_adjustment_get_upper (priv->adjustment) == gtk_adjustment_get_lower (priv->adjustment) &&
- GTK_IS_SCALE (range))
+ if (upper == lower && GTK_IS_SCALE (range))
gtk_widget_hide (priv->slider_widget);
else
gtk_widget_show (priv->slider_widget);
gtk_widget_queue_allocate (priv->trough_widget);
+ gtk_accessible_update_property (GTK_ACCESSIBLE (range),
+ GTK_ACCESSIBLE_PROPERTY_VALUE_MAX, upper,
+ GTK_ACCESSIBLE_PROPERTY_VALUE_MIN, lower,
+ -1);
+
/* Note that we don't round off to priv->round_digits here.
* that's because it's really broken to change a value
* in response to a change signal on that value; round_digits
g_signal_emit (range, signals[VALUE_CHANGED], 0);
+ gtk_accessible_update_property (GTK_ACCESSIBLE (range),
+ GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, gtk_adjustment_get_value (adjustment),
+ -1);
+
gtk_widget_queue_allocate (priv->trough_widget);
}